home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1996 / MacHack 1996.toast / Hacks / Hacks ’92 / RISCy Bitsness / memory.v < prev    next >
Encoding:
Text File  |  1992-06-18  |  4.2 KB  |  132 lines  |  [TEXT/MPS ]

  1. module memory(d,mras,cas,ma,w);
  2.  
  3.     inout     [31: 0]d;
  4.     reg         [31: 0]dd;
  5.     assign        d = dd;
  6.     
  7.     input            mras, cas, w;
  8.     
  9.     input     [ 9: 0]ma;
  10.     
  11.     reg         [19: 0]addr;
  12.     
  13.     reg         [31: 0]m[8192];    // the memory - just enough to run a program
  14.     
  15.     always @(negedge mras) 
  16.         addr[19:10] = ma;
  17.  
  18.     always @(posedge mras)
  19.         dd = 32'bz;
  20.         
  21.     always @(negedge cas) 
  22.     if (~mras) begin
  23.         addr[9:0] = ma;
  24.         if (~w) begin
  25.             dd = m[addr];
  26.         end else begin
  27.             m[addr] = d;
  28.         end
  29.     end
  30.     
  31.     initial begin
  32.         addr = 0;
  33.         m[0]  = 32'hc1000000;    //00        const    r1, screen_base                                                                                                                    
  34.         m[1]  = 32'he1000040;    //04        consth    r1, screen_base>>16                                                                
  35.         m[2]  = 32'hc2005555;    //08        const    r2, 0x5555                                                                        
  36.         m[3]  = 32'he2005555;    //0c        consth    r2, 0x5555                                                                        
  37.         m[4]  = 32'hc300aaaa;    //10        const    r3, 0xaaaa                                                                        
  38.         m[5]  = 32'he300aaaa;    //14        consth    r3, 0xaaaa                                                                        
  39.         m[6]  = 32'hc4000080;    //18        const    r4, 128                            // screen is 256 high                            
  40.                                 //    loop:
  41.         m[7]  = 32'hc5000009;    //1c            const    r5, 9                        // screen is 256/32+1 words wide = 32'h9            
  42.                                 //    loop1:
  43.         m[8]  = 32'h21100000;    //20                sw        r2, (r1)                                                                
  44.         m[9]  = 32'h65288001;    //24                sub        r5, r5, 1                                                                
  45.         m[10] = 32'h662b8000;    //28                eq        r6, r5, 0                                                                
  46.         m[11] = 32'ha6000020;    //2c                bf        r6, loop1                                                                
  47.         m[12] = 32'h61080004;    //30                add        r1, r1, 4
  48.                                 //    
  49.         m[13] = 32'hc5000009;    //34            const    r5, 9                        // screen is 256/32+1 words wide = 32'h9            
  50.                                 //    loop2:
  51.         m[14] = 32'h21180000;    //38                sw        r3, (r1)                                                                
  52.         m[15] = 32'h65288001;    //3c                sub        r5, r5, 1                                                                
  53.         m[16] = 32'h662b8000;    //40                eq        r6, r5, 0
  54.         m[17] = 32'ha6000038;    //44                bf        r6, loop2
  55.         m[18] = 32'h61080004;    //48                add        r1, r1, 4
  56.                                 //    
  57.         m[19] = 32'h64208001;    //4c            sub        r4, r4, 1                                                                    
  58.         m[20] = 32'h66238000;    //50            eq        r6, r4, 0
  59.         m[21] = 32'ha600001c;    //54            bf        r6, loop
  60.         m[22] = 32'h60000000;    //54            nop
  61.                                 //    
  62.         m[23] = 32'hc1000fd0;    //58        const    r1, screen_base+4*9*(128-16 + 4*4                0x00400010+36*(112) 00400fd0
  63.         m[24] = 32'he1000040;    //5c        consth    r1, (screen_base+4*9*((256/2)-(32/2)) + 4*4)>>16
  64.         m[25] = 32'hc2000400;    //60        const    r2, icon
  65.         m[26] = 32'hc3000020;    //64        const    r3, 32
  66.                                 //    loop3:
  67.         m[27] = 32'h02200000;    //68            lw    r4, (r2)
  68.         m[28] = 32'h62100004;    //6c            add    r2, r2, 4
  69.         m[29] = 32'h21200000;    //70            sw    r4, (r1)
  70.         m[30] = 32'h63188001;    //74            sub    r3, r3, 1                                                                        
  71.         m[31] = 32'h651b8000;    //78            eq    r5, r3, 0
  72.         m[32] = 32'ha500006c;    //7c            bf    r5, loop3
  73.         m[33] = 32'h61080024;    //80            add    r1, r1, 9*4
  74.         
  75.         m[34] = 32'hc100fffc;    //84        const    r1, 004ffffc
  76.         m[35] = 32'he100004f;    //88        consth    r1, 004ffffc>>6
  77.         m[36] = 32'hc2000440;    //8c        const    r2, sound
  78.         m[37] = 32'hc300028b;    //90        const    r3, 651
  79.                                 //    loop4:
  80.         m[38] = 32'h02200000;    //94            lw    r4, (r2)
  81.         m[39] = 32'h62100004;    //98            add    r2, r2, 4
  82.         m[40] = 32'h21200000;    //9c            sw    r4, (r1)
  83.         m[41] = 32'h63188001;    //a0            sub    r3, r3, 1                                                                        
  84.         m[42] = 32'h651b8000;    //a4            eq    r5, r3, 0
  85.         m[43] = 32'ha5000094;    //a8            bf    r5, loop4
  86.         m[44] = 32'h60000000;    //ac            nop
  87.         
  88.         m[45] = 32'hc100fff8;    //b0        const    r1, 004ffff8
  89.         m[46] = 32'he100004f;    //b4        consth    r1, 004ffff8>>6
  90.         m[47] = 32'hc2000001;    //b8        consth    r1, 1
  91.         m[48] = 32'h21100000;    //bc        sw        r2, (r1)                                                                
  92.         
  93.         m[49] = 32'h60005000;    //c0            halt
  94.                                 //        . = 0x400    
  95.                                 //icon:
  96.         m[256] = 32'h55555555;
  97.         m[257] = 32'hAFFFFFEA;
  98.         m[258] = 32'h58000015;
  99.         m[259] = 32'hA800001A;
  100.         m[260] = 32'h58FFFF15;
  101.         m[261] = 32'hA900009A;
  102.         m[262] = 32'h59000095;
  103.         m[263] = 32'hA900009A;
  104.         m[264] = 32'h59041095;
  105.         m[265] = 32'hA900809A;
  106.         m[266] = 32'h59008095;
  107.         m[267] = 32'hA900809A;
  108.         m[268] = 32'h59041095;
  109.         m[269] = 32'hA903E09A;
  110.         m[270] = 32'h59014095;
  111.         m[271] = 32'hA901409A;
  112.         m[272] = 32'h59008095;
  113.         m[273] = 32'hA8FFFF1A;
  114.         m[274] = 32'h58000015;
  115.         m[275] = 32'hA800001A;
  116.         m[276] = 32'h58000015;
  117.         m[277] = 32'hA800001A;
  118.         m[278] = 32'h5800FF15;
  119.         m[279] = 32'hA800001A;
  120.         m[280] = 32'h58000015;
  121.         m[281] = 32'hA800001A;
  122.         m[282] = 32'h58000015;
  123.         m[283] = 32'hAFFFFFEA;
  124.         m[284] = 32'h54000035;
  125.         m[285] = 32'hAC00002A;
  126.         m[286] = 32'h54000035;
  127.         m[287] = 32'hAFFFFFEA;
  128.                                 //sound:
  129.     end
  130.     
  131. endmodule
  132.